// 生成器函数会自动返回一个生成器对象，调用这个对象的next（）才会让这个函数的函数体开始执行，
// 执行过程中一旦遇到yield关键词，函数的函数体将会暂停， 并将yield的结果返回；
// 如果继续调用这个函数的next（）,则继续执行函数，在yield暂停地方开始，循环至函数调用结束
// 最大特点：惰性执行，调用才执行
function* foo() {
    console.log("foo");
    return 100
}

// const foo_generator = foo()
// console.log(foo_generator);
// //Object [Generator] {},如果方法中内置[Symbol.iterator]则说明准寻iterator接口协议，可执行next（）
// console.log(foo_generator.next()); //value: 100, done: true }
// console.log(foo_generator.next()); //{ value: undefined, done: true }

function* bar() {
    console.log(111);
    yield 100
    console.log(222);
    yield 200
    console.log(333);
    yield 300
}

const bar_ge = bar()
console.log(bar_ge); //Object [Generator] {}
console.log(bar_ge.next()); //111  { value: 100, done: false }
console.log(bar_ge.next()); //222  { value: 200, done: false }
console.log(bar_ge.next()); //333  { value: 300, done: false }
console.log(bar_ge.next()); //  { value: undefined, done: true }